#ifndef __WIZ_MUTEX_HPP__SHANHAOBO_19800429__
#define __WIZ_MUTEX_HPP__SHANHAOBO_19800429__

#include "../Base/WizBase.hpp"

namespace Wiz
{
    namespace Mutex
    {
        struct Interface : public ::Wiz::Noncopyable::Type
        {
            virtual ::Wiz::Void::Type Acquire()                         = 0;
            virtual ::Wiz::Void::Type Release()                         = 0;
            virtual ::Wiz::Bool::Type TryAcquire()                      = 0;
            virtual ::Wiz::Bool::Type TimeAcquire(::Wiz::UInt32::In)    = 0;    /// millisecond
        };
        WIZ_DECLARE_PTR(::Wiz::Mutex::Interface);

        WIZ_EXPORT ::Wiz::Mutex::Ptr Create();
        WIZ_EXPORT ::Wiz::Void::Type Destroy(::Wiz::Mutex::Ptr&);
    } /// end of namespace Mutex
} /// end of namespace Wiz

#endif /*__WIZ_MUTEX_HPP__SHANHAOBO_19800429__*/
